package vip.liux.contracts.infrastructure.pay;

/**
 * 支付客户端的工厂接口
 *
 * @author 芋道源码
 */
@SuppressWarnings({"rawtypes"})
public interface PayClientFactory {

    /**
     * 获得支付客户端
     *
     * @param channelId 渠道编号
     * @return 支付客户端
     */
    PayClient getPayClient(Long channelId);

    /**
     * 创建支付客户端
     *
     * @param channelId   渠道编号
     * @param channelCode 渠道编码
     * @param config      支付配置
     * @return 支付客户端
     */
    <Config extends PayClientConfig> PayClient createOrUpdatePayClient(
            Long channelId, String channelCode, Config config);
}
